package com.fight.strive.sys.modules.rbac.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fight.strive.sys.modules.common.PageR;
import com.fight.strive.sys.modules.rbac.entity.RbacRoleEntity;
import com.fight.strive.sys.modules.validator.StriveValid;

import java.util.List;
import java.util.Map;

public interface RbacRoleService extends IService<RbacRoleEntity> {

    /**
     * 保存角色信息
     *
     * @param entity entity
     */
    void saveRole(@StriveValid RbacRoleEntity entity);

    /**
     * 获取分页
     *
     * @param page page
     * @return ipage
     */
    IPage<RbacRoleEntity> listByPage(PageR<RbacRoleEntity> page);

    /**
     * 根据用户 ID 获取 用户角色
     *
     * @param userId user id
     * @return list role
     */
    List<RbacRoleEntity> listByUserId(Long userId);

    /**
     * 根据用户 ID 获取 用户角色代码
     *
     * @return hash map
     */
    Map<String, Boolean> getRoleByUserId(Long userId);

    /**
     * 根据部门 ID 获取 部门角色
     *
     * @param departmentId department id
     * @return role entity
     */
    List<RbacRoleEntity> listByDepartmentId(Long departmentId);

    /**
     * 根据部门 ID 获取 部门角色代码
     *
     * @param departmentId department id
     * @return hash map
     */
    Map<String, Boolean> getRoleByDepartmentId(Long departmentId);

    /**
     * 删除角色，判断角色有无关联的 用户 或 部门 有就不能删
     *
     * @param entity entity
     */
    void removeRole(RbacRoleEntity entity);
}
